package cn.kgc.springmvc.day03.controller;

import cn.kgc.springmvc.day03.entity.User;
import cn.kgc.springmvc.day03.response.ResponseResult;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import java.util.Arrays;
import java.util.List;

/**
 * @author 课工场
 * @date 2024/7/22
 * @description      springmvc中的方法返回值可以有哪些类型
 * 1. ModelAndView   视图解析器   转发     ModelAndView中封装的数据在转发时会设置在请求对象中 request
 * 2. String     视图名   转发   视图解析器
 * 3. 对象类型    json格式进行返回
 * 4. 没有返回值    void
 *
 * @RestController = @Controller + @ResponseBody
 * 1.标识当前类时控制层
 * 2.该类中所有的方法返回值都是json格式数据
 */
@Controller
// @ResponseBody   //  该模块下的数据 全部以json格式进行返回
// @RestController
@RequestMapping("user")
public class UserController {


    @GetMapping("m1")
    public ModelAndView  method1(){

        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("user");
        modelAndView.addObject("info","hello  modelAndView");
        return modelAndView;

    }

    //  返回值如果是String类型的数据 则表示是视图名  经过视图解析器  /user.jsp    转发
    // @GetMapping("m2")
    // public String method2(HttpServletRequest  request){
    //     request.setAttribute("info","hello request");
    //     return "user";
    // }

    @GetMapping("m2")
    public String method2(Model model){
        model.addAttribute("info","hello model");
        return "user";
    }


    //  {code:0,message:"操作成功",data:[]}
    @GetMapping("m3")
    @ResponseBody   //   返回值以json格式进行返回     ResponseResult => jackson  =>   json
    public ResponseResult method3(){

        ResponseResult responseResult = new ResponseResult();
        responseResult.setCode(0);
        responseResult.setMessage("查询成功");

        User user = new User();
        user.setId(1);
        user.setUsername("tom");
        user.setPassword("123456");

        List<User> users = Arrays.asList(user, user, user, user);
        responseResult.setData(users);


        return responseResult;
    }


}
